package cn.supermarket.common.utils;

import com.github.benmanes.caffeine.cache.LoadingCache;
import org.springframework.stereotype.Component;

import java.util.*;

/**
 * @Author yp
 * @Date 2024/5/27:15:27
 */
@Component
public class CaffeineUtils {
    /**
     * 添加缓存
     *
     * @param loadingCache 缓存集合
     * @param key          键
     * @param value        值
     * @author huya
     * @date 2020/7/8 22:06
     */
    public static void put(LoadingCache loadingCache, String key, Object value) {
        loadingCache.put(key,value);
    }

    /**
     * 通过缓存key获取缓存
     *
     * @param loadingCache 缓存集合
     * @param key 键
     * @return 值
     * @author huya
     * @date 2020/7/8 22:08
     */
    public static Object get(LoadingCache loadingCache, String key) {
        return loadingCache.asMap().get(key);
    }

    /**
     * 删除缓存
     *
     * @param loadingCache 缓存集合
     * @param keys 键，多个
     * @author huya
     * @date 2020/7/8 22:09
     */
    public static void remove(LoadingCache loadingCache, String... keys) {
        if (keys.length > 0) {
            for (String itemKey : keys) {
                loadingCache.asMap().remove(itemKey);
            }
        }
    }

    /**
     * 删除所有缓存
     */
    public static void clear(LoadingCache loadingCache) {
        loadingCache.asMap().clear();
    }

    /**
     * 获得缓存的所有key列表
     *
     * @return key列表
     * @author huya
     * @date 2020/7/8 22:11
     */
    public static Collection<String> getAllKeys(LoadingCache loadingCache) {
        return loadingCache.asMap().keySet();
    }

    /**
     * 获得缓存的所有值列表
     *
     * @return 值列表
     * @author huya
     * @date 2020/7/8 22:11
     */
    public static Collection<Object> getAllValues(LoadingCache loadingCache) {
        Set<String> set=loadingCache.asMap().keySet();
        List<Object> list=new ArrayList<>();
        for (String str:set){
            list.add(loadingCache.asMap().get(str));
        }
        return list;
    }

    /**
     * 获取所有的key，value
     *
     * @return 键值map
     * @author huya
     * @date 2020/7/8 22:11
     */
    public static Map<String, Object> getAllKeyValues(LoadingCache loadingCache) {
        return loadingCache.asMap();
    }
}
